<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>203.移除链表元素</title>
</head>
<body>
    <script>
    //    给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
    

    //  示例 1：
    
    
    //  输入：head = [1,2,6,3,4,5,6], val = 6
    //  输出：[1,2,3,4,5]
    //  示例 2：
    
    //  输入：head = [], val = 1
    //  输出：[]
    //  示例 3：
    
    //  输入：head = [7,7,7,7], val = 7
    //  输出：[]
    
    
    //  提示：
    
    //  列表中的节点数目在范围 [0, 104] 内
    //  1 <= Node.val <= 50
    //  0 <= val <= 50
    /**
     * Definition for singly-linked list.
     * function ListNode(val, next) {
     *     this.val = (val===undefined ? 0 : val)
     *     this.next = (next===undefined ? null : next)
     * }
     */
    /**
     * @param {ListNode} head
     * @param {number} val
     * @return {ListNode}
     */
    var removeElements = function(head, val) {
        let preNode = head; // 上一节点
        let nowNode = head; // 当前所在节点
        while(nowNode) {
            if (nowNode.val === val) {
                if (nowNode === head) { // 处于首个节点
                    head = head.next;
                    nowNode = head;
                    preNode = head;
                } else { // 处于中间节点
                    preNode.next = nowNode.next;
                    nowNode = nowNode.next;
                }
            } else {
                preNode = nowNode;
                nowNode = nowNode.next;
            }
        }
        return head
    };
    </script>
</body>
</html>